package com.auqaoasis.model.field;

import com.auqaoasis.operator.FilterPredicate;
import com.auqaoasis.operator.PredicateEnum;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.Serializable;

/**
 * @Author Auqaoasis
 * @Date 2022/3/29 - 21:30
 * @Description: 字段,表示是元组里面的一个属性值
 */
public interface Field extends Serializable {

    /**
     * 返回字段数据类型
     * @return
     */
    FieldType getType();

    /**
     * 序列化
     * @param dos
     * @throws IOException
     */
    void serialize(DataOutputStream dos) throws IOException;

    /**
     * 相当于是看字段的值
     * @return
     */
    @Override
    String toString();

    /**
     * 是否满足 this.value 比较 operand
     *
     * @param predicateEnum 比较条件
     * @param operand       操作数
     * @return 是否满足 this.value 比较 operand
     */
    boolean compare(PredicateEnum predicateEnum, Field operand);
}
